package LeetCode刷题;

/**
 * @program: Java_Study
 * @author: Xiaofan
 * @createTime: 2021-11-01 14:28
 * @description: Functions of this class is
 * 题解：
 * class Solution {
 *     public boolean isSubStructure(TreeNode A, TreeNode B) {
 *         if(A==null||B==null){//如果A和B节点有一个为空的话，根据题目的要求，就直接返回假
 *             return false;
 *         }
 *         return judge(A,B)//假如B在A的开始位置，不是从A的跟节点开始的呢，这个时候就要递归A的左子树和其右子树来去找找看是否有和B所匹配的子树
 *         ||isSubStructure(A.left,B)||isSubStructure(A.right,B);
 *     }
 *     private boolean judge(TreeNode A,TreeNode B){
 *     ！！！！！！！！！！！！！！！下面的判断条件还是容易忘！！！！！！！！！！！！！！！！
 *         if(B==null){//如果在递归寻找的过程中，B已经为空了，说明B在A中存在子树，返回为真
 *             return true;
 *         }
 *         if(A==null||A.val!=B.val){//如果B不为空的情况下，A为空了，或者A和B当前节点的值不相同，则直接返回假
 *             return false;
 *         }
 *         //然后如果A树B树不为空且值都相等，就继续递归判断，因为是要判断子树，所以左右子树必须要都为真才可以说明B是A中间的一部分
 *         return judge(A.left,B.left)&&judge(A.right,B.right);
 *     }
 * }
 **/
public class NoNoNo树的子结构 {
    //判断一个数是不是另一颗树的子树
    //特殊判断：有一颗树为空就不成立
    //这道题的思路比较特殊，先判断两棵树是否是相同，如果相同那么就是满足题意的，
    //然后判断一棵树的左子树是否是另一颗树的子树/一棵树的右子树是否是另一颗树的子树
    public static void main(String args[]){

    }
}
